<?php
namespace Application\traits;

/**
 * Trait RedirectTrait
 *
 * 重定向组件
 */
trait RedirectTrait
{
    /**
     * 获取重定向的标识,这里默认是获取渠道id,修改转换为其他标识,请重写这个方法
     *
     * @return mixed
     */
    protected function getRedirectKey()
    {
        return $this->getChId();
    }

    /**
     * 获取重定向配置,返回对应平台标识. 默认获取config内的redirect,需要修改其他获取方式请重写这个方法
     *
     * @return string 平台名
     */
    protected function getRedirectConfig()
    {
        return $this->config->get("redirect." . $this->getRedirectKey(), '');
    }

    /**
     * 检查并替换链接中的平台标识号
     *
     * @return null|string
     */
    protected function checkRedirect()
    {
        $pf_name = $this->getRedirectConfig();
        if(!empty($pf_name) && $pf_name != PFORM_NAME)
        {
            // 替换平台名
            $php_self = $_SERVER['PHP_SELF'];
            $php_self = str_replace(PFORM_NAME, $pf_name, $php_self);

            // 跳转到对应平台
            $url = SCHEME . "://{$_SERVER['HTTP_HOST']}{$php_self}";

            return $url;
        }

        return null;
    }

    /**
     * 使用头信息Location进行重定向
     */
    public function headerRedirect()
    {
        if($url = $this->checkRedirect())
        {
            $url .= "?{$_SERVER['QUERY_STRING']}";
            $this->logfile("redirect to $url");
            header('Location:'. $url);
            exit;
        }
    }

    /**
     * 使用curl请求方式进行重定向
     */
    public function curlRedirect()
    {
        if($url = $this->checkRedirect())
        {
            $ret = 'unknown request';
            if(!empty($_POST))
            {
                $this->logfile("post redirect. url: {$url}, params: " . print_r($_POST, true));
                $ret = curl($url, $_POST);
            }
            else if(!empty($_GET))
            {
                $url .= "?{$_SERVER['QUERY_STRING']}";
                $this->logfile("get redirect. url: {$url}");
                $ret = curl($url);
            }

            echo $ret;
            exit;
        }
    }
}